package com.imbneciosup;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.gesture.Prediction;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.imbneciosup.entidades.Propietario;
import com.imbneciosup.recursos.Conexion;

public class ListarPropietarioActivity extends Activity implements
		OnClickListener {

	ProgressDialog cargando;
	ListView lvPropietario;
	EditText etBuscar;
	Button bBuscar;
	TextView tvTotal, tvResultado;

	List<Propietario> lPropietario;
	List<Propietario> resultado;

	public List<Propietario> filtrarPropietarios(String valor) {

		for (int i = 0; i < lPropietario.size(); i++) {
			if (lPropietario.get(i).getNombreCom().toUpperCase()
					.contains(valor)) {
				resultado.add(lPropietario.get(i));
			}
		}

		tvResultado.setText("Resultado: " + resultado.size() + " registros.");

		return resultado;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar_propietario);

		lvPropietario = (ListView) findViewById(R.id.lvPropietarios);
		etBuscar = (EditText) findViewById(R.id.etBuscar);
		bBuscar = (Button) findViewById(R.id.bBuscar);
		bBuscar.setOnClickListener(this);
		tvTotal = (TextView) findViewById(R.id.tvTotal);
		tvTotal.setText("Total: 0 registros.");
		tvResultado = (TextView) findViewById(R.id.tvResultado);
		tvResultado.setText("Resultado: 0 registros.");

		cargando = new ProgressDialog(this);
		cargando.setMessage("Descargando...");
		cargando.setTitle("Progreso");
		cargando.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		cargando.setCancelable(false);

		lPropietario = new ArrayList<Propietario>();

		ListarPropietario listar = new ListarPropietario();
		listar.execute();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.listar_propietario, menu);
		return true;
	}

	public class PropietarioAdaptador extends BaseAdapter {

		Activity context;
		List<Propietario> lista;

		public PropietarioAdaptador(Activity context, List<Propietario> lista) {
			this.context = context;
			this.lista = lista;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return lista.size();
		}

		@Override
		public Object getItem(int pos) {
			// TODO Auto-generated method stub
			return lista.get(pos);
		}

		@Override
		public long getItemId(int pos) {
			// TODO Auto-generated method stub
			return pos;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			View item = convertView;

			if (item == null) {
				LayoutInflater inflater = (LayoutInflater) context
						.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				item = inflater.inflate(R.layout.item_propietario, null);

				Propietario pro = lista.get(position);

				TextView tvNombreCompleto = (TextView) item
						.findViewById(R.id.tvNombreCompleto);
				tvNombreCompleto.setText(pro.getNombreCom());
				TextView tvCorreo = (TextView) item.findViewById(R.id.tvCorreo);
				tvCorreo.setText((pro.getEmail() == "null" ? "Correo: No tiene."
						: "Correo: " + pro.getEmail()));

				TextView tvTelefonoMovil = (TextView) item
						.findViewById(R.id.tvTelefonoMovil);
				tvTelefonoMovil
						.setText((pro.getTelfMovil() == "null" ? "Móvil: No tiene."
								: "Móvil: " + pro.getTelfMovil()));

			}
			return (item);

		}

	}

	public class ListarPropietario extends AsyncTask<Void, Float, Integer> {

		@Override
		protected void onPostExecute(Integer result) {

			tvTotal.setText("Total: " + lPropietario.size() + " registros.");
			PropietarioAdaptador adaptador = new PropietarioAdaptador(
					ListarPropietarioActivity.this, lPropietario);
			lvPropietario.setAdapter(adaptador);

			cargando.dismiss();
		}

		@Override
		protected void onPreExecute() {
			cargando.setProgress(0);
			cargando.show();
		}

		@Override
		protected void onProgressUpdate(Float... valores) {
			// int p = Math.round(100* valores[0]);
			// cargando.incrementProgressBy(p);
		}

		@Override
		protected Integer doInBackground(Void... params) {

			Conexion con = new Conexion();
			HttpClient httpClient = new DefaultHttpClient();
			HttpGet del = new HttpGet(con.conexion
					+ "/WSPropietario/ListarPropietarios");
			del.setHeader("content-type", "application/json");
			try {
				HttpResponse resp = httpClient.execute(del);
				String respStr = EntityUtils.toString(resp.getEntity());
				JSONArray lista = new JSONArray(respStr);
				cargando.setMax(lista.length());
				for (int i = 0; i < lista.length(); i++) {
					JSONObject obj = lista.getJSONObject(i);
					Propietario propietario = new Propietario();
					propietario
							.setCdPropietario(obj.getString("cdPropietario"));
					// propietario.setCdUbig(obj.getString("cdUbig"));
					propietario.setNombreCom(obj.getString("nombreCom"));
					// propietario.setTipoDocI(obj.getString("tipoDocI"));
					// propietario.setNroDocI(obj.getString("nroDocI"));
					// propietario.setDomicilio(obj.getString("domicilio"));
					propietario.setTelfMovil(obj.getString("telfMovil"));
					propietario.setEmail(obj.getString("email"));
					// propietario.setHorarioVisita(obj.getString("horarioVisita"));
					// propietario.setObservacion(obj.getString("observacion"));
					propietario.setEstado(obj.getInt("estado"));
					lPropietario.add(propietario);
					// Float p = new Float(/lista.length()*1.0);
					cargando.setProgress((i + 1));
					publishProgress(new Float(i + 1));
				}
			} catch (Exception e) {
				Toast.makeText(ListarPropietarioActivity.this, "cayo en error",
						Toast.LENGTH_LONG).show();
			}
			return 0;
		}

	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.bBuscar:
			String nombre = etBuscar.getText().toString().trim();
			if (nombre.matches("[' 'a-zA-ZñÑ]*")) {
				if (!nombre.equals("")) {
					resultado = new ArrayList<Propietario>();

					resultado = filtrarPropietarios(nombre.toUpperCase());

					PropietarioAdaptador adaptador = new PropietarioAdaptador(
							ListarPropietarioActivity.this, resultado);
					lvPropietario.setAdapter(adaptador);
				} else {
					PropietarioAdaptador adaptador = new PropietarioAdaptador(
							ListarPropietarioActivity.this, lPropietario);
					lvPropietario.setAdapter(adaptador);
					tvResultado.setText("Resultado: 0 registros.");
				}
			} else {

				Toast.makeText(this,
						"Solo puede ingresar letras en la busqueda",
						Toast.LENGTH_LONG).show();
			}
			break;

		default:
			break;
		}
	}

}
